#ifndef STACK_QUEUE_H
#define STACK_QUEUE_H

#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <queue>

class MyStack;

class listNode {
    friend class MyStack;
private:
    listNode* next;
    int data;
public:
    listNode() : next(nullptr), data(0) {}
    listNode(int nodeData, listNode* succ = nullptr) : data(nodeData), next(succ) {}
};

class MyStack {
private:
    listNode* topNode;
    int stackSize;

public:
    MyStack();
    ~MyStack();

    bool push(const int&);
    bool pop(int&);
    bool getTop(int&);
    void printStack();
};

class MyQueue {
private:
    int* queue;
    int capacity;
    int front;
    int rear;

public:
    MyQueue(const int&);
    ~MyQueue();

    bool enQueue(const int&);
    bool deQueue(int&);
    bool getFront(int&);
    void printQueue();

    bool isFull();
};

bool postfixExpression(const std::string&, std::string&);
bool expressionVal(const std::string&, int&);
void yanghui(const int&);

#endif // STACK_QUEUE_H
